package com.aaa.qy127.service.impl;

import com.aaa.qy127.dao.MenuDao;
import com.aaa.qy127.entity.Menu;
import com.aaa.qy127.entity.Staff;
import com.aaa.qy127.entity.Tree;
import com.aaa.qy127.service.MenuService;
import com.aaa.qy127.util.CodeAndMsg;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service("menuServiceImpl")
public class MenuServiceImpl implements MenuService {

    @Resource(name = "menuDaoImpl")
    private MenuDao menuDao;

    /**
     * 查询所有的 父菜单和子菜单 的信息
     * @param request
     * @return
     */
    @Override
    public ModelAndView getAllMenu(HttpServletRequest request){
        Staff staff = (Staff) request.getSession().getAttribute("staff");
        List<Menu> menus = menuDao.getAllMenuByRid(staff.getRoleId());
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("menus",menus);
        modelAndView.setViewName("pages/homepage/zhuye");
        return modelAndView;
    }

    /**
     * 获取所有权限菜单
     * @return
     */
    @Override
    public List<Tree> getMenu(){
        List<Tree> allMenu = menuDao.getAllMenu();
        return allMenu;
    }

    /**
     * 根据rid 获取到 这个角色的所有的 子菜单的mid
     * 并存储到一个list数组中
     * @param rid
     * @return
     */
    @Override
    public List getAllMidByRid(String rid){
        List<Map<String, Object>> allMidByRid = menuDao.getAllMidByRid(rid);
        List<Object> list = new ArrayList<>();
        for (Map<String, Object> map : allMidByRid) {
            list.add(map.get("mid"));
        }
        return list;
    }

    /**
     * 按照 传回来的rid 和 所有的菜单的mid 修改 权限菜单
     * 先按照 rid 先把 权限和角色中间表中的所有跟当前rid对应的记录都删除
     * 再将传过来的数组中的所有mid和rid，再重新插入到权限和角色中间表中
     * @param rid
     * @param checkArr
     * @return
     */
    @Override
    public CodeAndMsg updateMenuByRid(String rid, String checkArr) {
        String[] split = checkArr.split(",");
        //1、先将权限和角色中间表中的所有跟当前rid对应的记录都干掉
        menuDao.delRolePremissionByRid(rid);
        //2、再将传过来的数组中的所有mid，再重新插入到权限和角色中间表中
        menuDao.insertRolePremission(rid,split);

        CodeAndMsg codeAndMsg = new CodeAndMsg();
        codeAndMsg.setCode(1001);
        codeAndMsg.setMsg("修改成功");

        return codeAndMsg;
    }
}
